import seaborn as sns
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

import pandas as pd
#数据集
train_df = pd.read_excel("携程航班处理数据.xlsx")

#数据可视化

#绘制价格与航空公司图
def priceCompany():
    g = sns.catplot(y="price",
                    x="airlineName",
                    data=train_df.sort_values(
                        "price",
                        ascending=False),
                    kind="boxen",
                    height=8,
                    aspect=3)
    g.fig.set_dpi(150)
    plt.show()
    # Jet Airways 在价格方面的异常值最多

# 绘制价格与来源的小提琴图
def priceSource():
    g = sns.catplot(y="Price",
                    x="Source",
                    data=train_df.sort_values(
                        "Price",
                        ascending=False),
                    kind="violin",
                    height=4,
                    aspect=3)
    g.fig.set_dpi(150)
    plt.show()
    #出发地的Banglore具有最多异常值，而Chennai最少

#绘制价格与目的地的箱线图
def priceDestination():
    g = sns.catplot(y="Price",
                    x="Destination",
                    data=train_df.sort_values(
                        "Price",
                        ascending=False),
                    kind="box", height=4,
                    aspect=3)
    g.fig.set_dpi(150)
    plt.show()
    #New Delhi的异常值最多，Kolkata的异常值最少

#绘制月份（持续时间）与航班数量的条形图
def MonthNumber():
    plt.figure(figsize=(10, 5), dpi=150)
    plt.title('Count of flights month wise')
    ax = sns.countplot(x='Journey_month', data=train_df)
    plt.xlabel('Month')
    plt.ylabel('Count of flights')
    for p in ax.patches:
        ax.annotate(int(p.get_height()),
                    (p.get_x() + 0.25,
                     p.get_height() + 1),
                    va='bottom',
                    color='black')
    plt.show()

def priceAirline():
    plt.figure(figsize = (15,4),dpi=200)
    plt.title('价格 VS 航空公司')
    plt.scatter(train_df['airlineName'],
                train_df['price'])
    plt.xlabel('航空公司')
    plt.ylabel('票价')
    plt.xticks(rotation = 10)
    plt.show()

def heatmap():
    # 绘制相关性
    plt.figure(figsize=(15, 15))
    ax = sns.heatmap(train_df.corr(numeric_only=True),  # pandas2.0版本后，原来corr函数自动忽略字符串等非浮点数的特性被修改
                annot=True,cmap="RdYlGn") #
    ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
    plt.show()

#heatmap()